//package com.fecean.aabbc.netty.client.prod1;
//
//import io.netty.buffer.ByteBuf;
//import io.netty.buffer.Unpooled;
//import io.netty.channel.ChannelHandler;
//import io.netty.channel.ChannelHandlerContext;
//import io.netty.channel.ChannelInboundHandlerAdapter;
//import io.netty.handler.timeout.IdleState;
//import io.netty.handler.timeout.IdleStateEvent;
//import io.netty.util.CharsetUtil;
//import lombok.extern.slf4j.Slf4j;
//import org.springframework.stereotype.Component;
//
//import javax.annotation.Resource;
//import java.util.Objects;
//
//@Slf4j
//@Component
//@ChannelHandler.Sharable
//public class NettyClientHeartBeatClientHandler extends ChannelInboundHandlerAdapter {
//
//    private static final ByteBuf HEARTBEAT_SEQUENCE = Unpooled.unreleasableBuffer(Unpooled.copiedBuffer("Heartbeat",
//            CharsetUtil.UTF_8));
//
//    @Resource
//    NettyClientConnector nettyClientConnector;
//
//    @Override
//    public void channelActive(ChannelHandlerContext ctx) {
//        log.info("已经连接服务端");
//        ctx.writeAndFlush("客户端注册");
//        ctx.fireChannelActive();
//    }
//
//    @Override
//    public void channelInactive(ChannelHandlerContext ctx) {
//        log.info("服务端已经退出");
//        nettyClientConnector.restart(3L);
//        ctx.fireChannelInactive();
//    }
//
//
//    @Override
//    public void channelRead(ChannelHandlerContext ctx, Object msg) {
//        if (Objects.equals("Heartbeat", msg)) {
//            log.info("收到服务端返回的心跳信息：{}", msg);
//        }else{
//            ctx.fireChannelRead(msg);
//        }
//    }
//
//
//    @Override
//    public void userEventTriggered(ChannelHandlerContext ctx, Object evt) throws Exception {
//        if (evt instanceof IdleStateEvent) {
//            IdleState state = ((IdleStateEvent) evt).state();
//            if (state == IdleState.WRITER_IDLE) {
//                // write heartbeat to server
//                ctx.writeAndFlush(HEARTBEAT_SEQUENCE.duplicate());
//            }
//        } else {
//            super.userEventTriggered(ctx, evt);
//        }
//    }
//}
